
{
    /*默认值*/
    function test(x,y='world') {//y='world'后面跟的参数要有默认值
        console.log(x,y);
    }
    test('hello');
}
{
    /*作用域问题*/
    let x='kill';
    function test1(x,y=x) {//上面定义的let x='kill'可以作用到这里，但是这里的块作用域又定义了一个新的let x，相当于x 被重置了，所以y取函数实参x的值，
        console.log(x,y)
    }
    test1('hello');//hello hello
    test1();//undefined undefined

    let a='god';
    function test2(b,c=a) {//这里a没有被重置,所以c取的是let a='god'的值
        console.log(b,c);
    }
    test2('dog');//dog god
}
{
    /*rest*/
    function test3(...args) {//...把args当做了一个数组，实参传进来时都进入了这个数组，注意不能有别的形参了
        for (let item of args){
            console.log(item);
        }
    }
    test3(1,2,3);
    console.log(...[4,5,6]);//把数组拆分为单项 4,5,6
}
{
    /*箭头函数*/
    let arrow = v => v*3;//let 函数名 = 参数 => 返回值[{函数体}]  (有{}表示函数体,无{}表示函数表达式，直接返回这个表达式的值)
    let arrow1 = (a,b) =>a*b;//多参
    let arrow2= () => 'god';//无参
    console.log(arrow(2));//6
    console.log('arrow1',arrow1(2,3));//6
    console.log(arrow2());//god


}